package com.icss.flow.controller;

import cn.hutool.core.util.ObjectUtil;
import com.icss.flow.pojo.dto.TMetaEntityDTO;
import com.icss.flow.pojo.dto.TMetaEntityPageDTO;
import com.icss.flow.pojo.vo.TMetaEntityVO;
import com.icss.flow.service.TMetaEntityService;
import org.dromara.common.core.domain.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 元数据实体表(TMetaEntity)表控制层
 *
 * @author makejava
 * @since 2024-01-30 12:41:59
 */
@RestController
@RequestMapping("/tMetaEntity")
public class TMetaEntityController {
    /**
     * 服务对象
     */
    @Autowired
    private TMetaEntityService tMetaEntityService;


    /***
     * 查询实体详情
     * @param entityCode
     * @return 实体vo
     */
    @GetMapping("/entityDetail/{entityCode}")
    public R<TMetaEntityVO> getEntityDetail(@PathVariable Integer entityCode) {
        TMetaEntityVO tMetaEntityVO = this.tMetaEntityService.getEntityDetail(entityCode);
        if (ObjectUtil.isEmpty(tMetaEntityVO)) {
            return R.fail("实体不存在");
        }
        return R.ok(tMetaEntityVO);
    }


    /**
     * 分组查询-实体列表
     *
     * @return 分页数据Page
     */
    @PostMapping("/queryList")
    public R<?> queryListAndGroup(@RequestBody TMetaEntityPageDTO pageDTO) {
        return R.ok(this.tMetaEntityService.queryListAndGroup(pageDTO));
    }

    /**
     * 生成元数据实体
     *
     * @return 单条数据
     */
    @PostMapping("/createEntity")
    public R<?> createEntity(@RequestBody @Validated TMetaEntityDTO tMetaEntityDTO) {
        if (!this.tMetaEntityService.createEntity(tMetaEntityDTO)) {
            return R.ok("新增失败");
        }
        return R.ok("新增成功");
    }


    /**
     * 元数据实体
     *
     * @return 单条数据
     */
    @PostMapping("/updateEntity")
    public R<?> updateEntity(@RequestParam Integer entityCode,
                             @RequestParam(required = false, defaultValue = "") String label,
                             @RequestParam(required = false, defaultValue = "") List<String> tags) {
        if (!this.tMetaEntityService.updateEntity(entityCode, label, tags)) {
            return R.ok("更新失败");
        }
        return R.ok("更新成功");
    }

    /**
     * 删除元数据实体
     *
     * @return 单条数据
     */
    @DeleteMapping("/{id}")
    public R<?> deleteEntity(@PathVariable Integer id) {
        if (!this.tMetaEntityService.deleteEntity(id)) {
            return R.fail("删除失败");
        }
        return R.ok("删除成功");
    }

    /**
     * 根据实体编码保存json
     *
     * @return 单条数据
     */
    @PostMapping("/updateEntityCode")
    public R<?> getEntityCode(@RequestParam Integer entityCode,@RequestBody String json) {
        if (this.tMetaEntityService.getEntityCode(entityCode,json)){
            return R.ok("保存成功");
        }
        return R.fail("保存失败");
    }
}

